home *** CD-ROM | disk | FTP | other *** search
/ SGI Freeware 2002 November / SGI Freeware 2002 November - Disc 1.iso / dist / fw_emacs-lisp-intro.idb / usr / freeware / info / emacs-lisp-intro.info-1.z / emacs-lisp-intro.info-1
Text File  |  2002-07-08  |  50KB  |  1,187 lines

  1. This is emacs-lisp-intro.info, produced by makeinfo version 4.0b from
  2. emacs-lisp-intro.texi.
  3.  
  4. INFO-DIR-SECTION Emacs
  5. START-INFO-DIR-ENTRY
  6. * Emacs Lisp Intro: (eintr).
  7.               A simple introduction to Emacs Lisp programming.
  8. END-INFO-DIR-ENTRY
  9.  
  10.    This is an introduction to `Programming in Emacs Lisp', for people
  11. who are not programmers.
  12.  
  13.    Edition 2.04, 2001 Dec 17
  14.  
  15.    Copyright (C) 1990, '91, '92, '93, '94, '95, '97, 2001 Free Software
  16. Foundation, Inc.
  17.  
  18.    Permission is granted to copy, distribute and/or modify this document
  19. under the terms of the GNU Free Documentation License, Version 1.1 or
  20. any later version published by the Free Software Foundation; with the
  21. Invariant Section being the Preface, with the Front-Cover Texts being
  22. no Front-Cover Texts, and with the Back-Cover Texts being no Back-Cover
  23. Texts.  A copy of the license is included in the section entitled "GNU
  24. Free Documentation License".
  25.  
  26. 
  27. File: emacs-lisp-intro.info,  Node: Top,  Next: Preface,  Prev: (dir),  Up: (dir)
  28.  
  29. An Introduction to Programming in Emacs Lisp
  30. ********************************************
  31.  
  32.    This is an introduction to `Programming in Emacs Lisp', for people
  33. who are not programmers.
  34.  
  35.    This master menu first lists each chapter and index; then it lists
  36. every node in every chapter.
  37.  
  38. * Menu:
  39.  
  40. * Preface::                     What to look for.
  41. * List Processing::             What is Lisp?
  42. * Practicing Evaluation::       Running several programs.
  43. * Writing Defuns::              How to write function definitions.
  44. * Buffer Walk Through::         Exploring a few buffer-related functions.
  45. * More Complex::                A few, even more complex functions.
  46. * Narrowing & Widening::        Restricting your and Emacs attention to
  47.                                     a region.
  48. * car cdr & cons::              Fundamental functions in Lisp.
  49. * Cutting & Storing Text::      Removing text and saving it.
  50. * List Implementation::         How lists are implemented in the computer.
  51. * Yanking::                     Pasting stored text.
  52. * Loops & Recursion::           How to repeat a process.
  53. * Regexp Search::               Regular expression searches.
  54. * Counting Words::              A review of repetition and regexps.
  55. * Words in a defun::            Counting words in a `defun'.
  56. * Readying a Graph::            A prototype graph printing function.
  57. * Emacs Initialization::        How to write a `.emacs' file.
  58. * Debugging::                   How to run the Emacs Lisp debuggers.
  59. * Conclusion::                  Now you have the basics.
  60. * the-the::                     An appendix: how to find reduplicated words.
  61. * Kill Ring::                   An appendix: how the kill ring works.
  62. * Full Graph::                  How to create a graph with labelled axes.
  63. * GNU Free Documentation License::
  64. * Index::
  65. * About the Author::
  66.  
  67.  --- The Detailed Node Listing ---
  68.  
  69. Preface
  70.  
  71. * Why::                         Why learn Emacs Lisp?
  72. * On Reading this Text::        Read, gain familiarity, pick up habits....
  73. * Who You Are::                 For whom this is written.
  74. * Lisp History::
  75. * Note for Novices::            You can read this as a novice.
  76. * Thank You::
  77.  
  78. List Processing
  79.  
  80. * Lisp Lists::                  What are lists?
  81. * Run a Program::               Any list in Lisp is a program ready to run.
  82. * Making Errors::               Generating an error message.
  83. * Names & Definitions::         Names of symbols and function definitions.
  84. * Lisp Interpreter::            What the Lisp interpreter does.
  85. * Evaluation::                  Running a program.
  86. * Variables::                   Returning a value from a variable.
  87. * Arguments::                   Passing information to a function.
  88. * set & setq::                  Setting the value of a variable.
  89. * Summary::                     The major points.
  90. * Error Message Exercises::
  91.  
  92. Lisp Lists
  93.  
  94. * Numbers Lists::               List have numbers, other lists, in them.
  95. * Lisp Atoms::                  Elemental entities.
  96. * Whitespace in Lists::         Formating lists to be readable.
  97. * Typing Lists::                How GNU Emacs helps you type lists.
  98.  
  99. The Lisp Interpreter
  100.  
  101. * Complications::               Variables, Special forms, Lists within.
  102. * Byte Compiling::              Specially processing code for speed.
  103.  
  104. Evaluation
  105.  
  106. * Evaluating Inner Lists::      Lists within lists...
  107.  
  108. Variables
  109.  
  110. * fill-column Example::
  111. * Void Function::               The error message for a symbol
  112.                                   without a function.
  113. * Void Variable::               The error message for a symbol without a value.
  114.  
  115. Arguments
  116.  
  117. * Data types::                  Types of data passed to a function.
  118. * Args as Variable or List::    An argument can be the value
  119.                                   of a variable or list.
  120. * Variable Number of Arguments::  Some functions may take a
  121.                                   variable number of arguments.
  122. * Wrong Type of Argument::      Passing an argument of the wrong type
  123.                                   to a function.
  124. * message::                     A useful function for sending messages.
  125.  
  126. Setting the Value of a Variable
  127.  
  128. * Using set::                   Setting values.
  129. * Using setq::                  Setting a quoted value.
  130. * Counting::                    Using `setq' to count.
  131.  
  132. Practicing Evaluation
  133.  
  134. * How to Evaluate::             Typing editing commands or C-x C-e
  135.                                   causes evaluation.
  136. * Buffer Names::                Buffers and files are different.
  137. * Getting Buffers::             Getting a buffer itself, not merely its name.
  138. * Switching Buffers::           How to change to another buffer.
  139. * Buffer Size & Locations::     Where point is located and the size of
  140.                                 the buffer.
  141. * Evaluation Exercise::
  142.  
  143. How To Write Function Definitions
  144.  
  145. * Primitive Functions::
  146. * defun::                       The `defun' special form.
  147. * Install::                     Install a function definition.
  148. * Interactive::                 Making a function interactive.
  149. * Interactive Options::         Different options for `interactive'.
  150. * Permanent Installation::      Installing code permanently.
  151. * let::                         Creating and initializing local variables.
  152. * if::                          What if?
  153. * else::                        If--then--else expressions.
  154. * Truth & Falsehood::           What Lisp considers false and true.
  155. * save-excursion::              Keeping track of point, mark, and buffer.
  156. * Review::
  157. * defun Exercises::
  158.  
  159. Install a Function Definition
  160.  
  161. * Effect of installation::
  162. * Change a defun::              How to change a function definition.
  163.  
  164. Make a Function Interactive
  165.  
  166. * Interactive multiply-by-seven::  An overview.
  167. * multiply-by-seven in detail::  The interactive version.
  168.  
  169. `let'
  170.  
  171. * Prevent confusion::
  172. * Parts of let Expression::
  173. * Sample let Expression::
  174. * Uninitialized let Variables::
  175.  
  176. The `if' Special Form
  177.  
  178. * if in more detail::
  179. * type-of-animal in detail::    An example of an `if' expression.
  180.  
  181. Truth and Falsehood in Emacs Lisp
  182.  
  183. * nil explained::               `nil' has two meanings.
  184.  
  185. `save-excursion'
  186.  
  187. * Point and mark::              A review of various locations.
  188. * Template for save-excursion::
  189.  
  190. A Few Buffer--Related Functions
  191.  
  192. * Finding More::                How to find more information.
  193. * simplified-beginning-of-buffer::  Shows `goto-char',
  194.                                 `point-min', and `push-mark'.
  195. * mark-whole-buffer::           Almost the same as `beginning-of-buffer'.
  196. * append-to-buffer::            Uses `save-excursion' and
  197.                                 `insert-buffer-substring'.
  198. * Buffer Related Review::       Review.
  199. * Buffer Exercises::
  200.  
  201. The Definition of `mark-whole-buffer'
  202.  
  203. * mark-whole-buffer overview::
  204. * Body of mark-whole-buffer::   Only three lines of code.
  205.  
  206. The Definition of `append-to-buffer'
  207.  
  208. * append-to-buffer overview::
  209. * append interactive::          A two part interactive expression.
  210. * append-to-buffer body::       Incorporates a `let' expression.
  211. * append save-excursion::       How the `save-excursion' works.
  212.  
  213. A Few More Complex Functions
  214.  
  215. * copy-to-buffer::              With `set-buffer', `get-buffer-create'.
  216. * insert-buffer::               Read-only, and with `or'.
  217. * beginning-of-buffer::         Shows `goto-char',
  218.                                 `point-min', and `push-mark'.
  219. * Second Buffer Related Review::
  220. * optional Exercise::
  221.  
  222. The Definition of `insert-buffer'
  223.  
  224. * insert-buffer code::
  225. * insert-buffer interactive::   When you can read, but not write.
  226. * insert-buffer body::          The body has an `or' and a `let'.
  227. * if & or::                     Using an `if' instead of an `or'.
  228. * Insert or::                   How the `or' expression works.
  229. * Insert let::                  Two `save-excursion' expressions.
  230.  
  231. The Interactive Expression in `insert-buffer'
  232.  
  233. * Read-only buffer::            When a buffer cannot be modified.
  234. * b for interactive::           An existing buffer or else its name.
  235.  
  236. Complete Definition of `beginning-of-buffer'
  237.  
  238. * Optional Arguments::
  239. * beginning-of-buffer opt arg::  Example with optional argument.
  240. * beginning-of-buffer complete::
  241.  
  242. `beginning-of-buffer' with an Argument
  243.  
  244. * Disentangle beginning-of-buffer::
  245. * Large buffer case::
  246. * Small buffer case::
  247.  
  248. Narrowing and Widening
  249.  
  250. * Narrowing advantages::        The advantages of narrowing
  251. * save-restriction::            The `save-restriction' special form.
  252. * what-line::                   The number of the line that point is on.
  253. * narrow Exercise::
  254.  
  255. `car', `cdr', `cons': Fundamental Functions
  256.  
  257. * Strange Names::               An historical aside: why the strange names?
  258. * car & cdr::                   Functions for extracting part of a list.
  259. * cons::                        Constructing a list.
  260. * nthcdr::                      Calling `cdr' repeatedly.
  261. * nth::
  262. * setcar::                      Changing the first element of a list.
  263. * setcdr::                      Changing the rest of a list.
  264. * cons Exercise::
  265.  
  266. `cons'
  267.  
  268. * Build a list::
  269. * length::                      How to find the length of a list.
  270.  
  271. Cutting and Storing Text
  272.  
  273. * Storing Text::                Text is stored in a list.
  274. * zap-to-char::                 Cutting out text up to a character.
  275. * kill-region::                 Cutting text out of a region.
  276. * Digression into C::           Minor note on C programming language macros.
  277. * defvar::                      How to give a variable an initial value.
  278. * copy-region-as-kill::         A definition for copying text.
  279. * cons & search-fwd Review::
  280. * search Exercises::
  281.  
  282. `zap-to-char'
  283.  
  284. * Complete zap-to-char::        The complete implementation.
  285. * zap-to-char interactive::     A three part interactive expression.
  286. * zap-to-char body::            A short overview.
  287. * search-forward::              How to search for a string.
  288. * progn::                       The `progn' special form.
  289. * Summing up zap-to-char::      Using `point' and `search-forward'.
  290.  
  291. `kill-region'
  292.  
  293. * Complete kill-region::        The function definition.
  294. * condition-case::              Dealing with a problem.
  295. * delete-and-extract-region::   Doing the work.
  296.  
  297. Initializing a Variable with `defvar'
  298.  
  299. * See variable current value::
  300. * defvar and asterisk::         An old-time convention.
  301.  
  302. `copy-region-as-kill'
  303.  
  304. * Complete copy-region-as-kill::  The complete function definition.
  305. * copy-region-as-kill body::    The body of `copy-region-as-kill'.
  306.  
  307. The Body of `copy-region-as-kill'
  308.  
  309. * last-command & this-command::
  310. * kill-append function::
  311. * kill-new function::
  312.  
  313. How Lists are Implemented
  314.  
  315. * Lists diagrammed::
  316. * Symbols as Chest::            Exploring a powerful metaphor.
  317. * List Exercise::
  318.  
  319. Yanking Text Back
  320.  
  321. * Kill Ring Overview::          The kill ring is a list.
  322. * kill-ring-yank-pointer::      The `kill-ring-yank-pointer' variable.
  323. * yank nthcdr Exercises::
  324.  
  325. Loops and Recursion
  326.  
  327. * while::                       Causing a stretch of code to repeat.
  328. * dolist dotimes::
  329. * Recursion::                   Causing a function to call itself.
  330. * Looping exercise::
  331.  
  332. `while'
  333.  
  334. * Looping with while::          Repeat so long as test returns true.
  335. * Loop Example::                A `while' loop that uses a list.
  336. * print-elements-of-list::      Uses `while', `car', `cdr'.
  337. * Incrementing Loop::           A loop with an incrementing counter.
  338. * Decrementing Loop::           A loop with a decrementing counter.
  339.  
  340. A Loop with an Incrementing Counter
  341.  
  342. * Incrementing Example::        Counting pebbles in a triangle.
  343. * Inc Example parts::           The parts of the function definition.
  344. * Inc Example altogether::      Putting the function definition together.
  345.  
  346. Loop with a Decrementing Counter
  347.  
  348. * Decrementing Example::        More pebbles on the beach.
  349. * Dec Example parts::           The parts of the function definition.
  350. * Dec Example altogether::      Putting the function definition together.
  351.  
  352. Save your time: `dolist' and `dotimes'
  353.  
  354. * dolist::
  355. * dotimes::
  356.  
  357. Recursion
  358.  
  359. * Building Robots::             Same model, different serial number ...
  360. * Recursive Definition Parts::  Walk until you stop ...
  361. * Recursion with list::         Using a list as the test whether to recurse.
  362. * Recursive triangle function::
  363. * Recursion with cond::
  364. * Recursive Patterns::          Often used templates.
  365. * No Deferment::                Don't store up work ...
  366. * No deferment solution::
  367.  
  368. Recursion in Place of a Counter
  369.  
  370. * Recursive Example arg of 1 or 2::
  371. * Recursive Example arg of 3 or 4::
  372.  
  373. Recursive Patterns
  374.  
  375. * Every::
  376. * Accumulate::
  377. * Keep::
  378.  
  379. Regular Expression Searches
  380.  
  381. * sentence-end::                The regular expression for `sentence-end'.
  382. * re-search-forward::           Very similar to `search-forward'.
  383. * forward-sentence::            A straightforward example of regexp search.
  384. * forward-paragraph::           A somewhat complex example.
  385. * etags::                       How to create your own `TAGS' table.
  386. * Regexp Review::
  387. * re-search Exercises::
  388.  
  389. `forward-sentence'
  390.  
  391. * Complete forward-sentence::
  392. * fwd-sentence while loops::    Two `while' loops.
  393. * fwd-sentence re-search::      A regular expression search.
  394.  
  395. `forward-paragraph': a Goldmine of Functions
  396.  
  397. * forward-paragraph in brief::  Key parts of the function definition.
  398. * fwd-para let::                The `let*' expression.
  399. * fwd-para while::              The forward motion `while' loop.
  400. * fwd-para between paragraphs::  Movement between paragraphs.
  401. * fwd-para within paragraph::   Movement within paragraphs.
  402. * fwd-para no fill prefix::     When there is no fill prefix.
  403. * fwd-para with fill prefix::   When there is a fill prefix.
  404. * fwd-para summary::            Summary of `forward-paragraph' code.
  405.  
  406. Counting: Repetition and Regexps
  407.  
  408. * Why Count Words::
  409. * count-words-region::          Use a regexp, but find a problem.
  410. * recursive-count-words::       Start with case of no words in region.
  411. * Counting Exercise::
  412.  
  413. The `count-words-region' Function
  414.  
  415. * Design count-words-region::   The definition using a `while' loop.
  416. * Whitespace Bug::              The Whitespace Bug in `count-words-region'.
  417.  
  418. Counting Words in a `defun'
  419.  
  420. * Divide and Conquer::
  421. * Words and Symbols::           What to count?
  422. * Syntax::                      What constitutes a word or symbol?
  423. * count-words-in-defun::        Very like `count-words'.
  424. * Several defuns::              Counting several defuns in a file.
  425. * Find a File::                 Do you want to look at a file?
  426. * lengths-list-file::           A list of the lengths of many definitions.
  427. * Several files::               Counting in definitions in different files.
  428. * Several files recursively::   Recursively counting in different files.
  429. * Prepare the data::            Prepare the data for display in a graph.
  430.  
  431. Count Words in `defuns' in Different Files
  432.  
  433. * lengths-list-many-files::     Return a list of the lengths of defuns.
  434. * append::                      Attach one list to another.
  435.  
  436. Prepare the Data for Display in a Graph
  437.  
  438. * Sorting::                     Sorting lists.
  439. * Files List::                  Making a list of files.
  440. * Counting function definitions::
  441.  
  442. Readying a Graph
  443.  
  444. * Columns of a graph::
  445. * graph-body-print::            How to print the body of a graph.
  446. * recursive-graph-body-print::
  447. * Printed Axes::
  448. * Line Graph Exercise::
  449.  
  450. Your `.emacs' File
  451.  
  452. * Default Configuration::
  453. * Site-wide Init::              You can write site-wide init files.
  454. * defcustom::                   Emacs will write code for you.
  455. * Beginning a .emacs File::     How to write a `.emacs file'.
  456. * Text and Auto-fill::          Automatically wrap lines.
  457. * Mail Aliases::                Use abbreviations for email addresses.
  458. * Indent Tabs Mode::            Don't use tabs with TeX
  459. * Keybindings::                 Create some personal keybindings.
  460. * Keymaps::                     More about key binding.
  461. * Loading Files::               Load (i.e., evaluate) files automatically.
  462. * Autoload::                    Make functions available.
  463. * Simple Extension::            Define a function; bind it to a key.
  464. * X11 Colors::                  Colors in version 19 in X.
  465. * Miscellaneous::
  466. * Mode Line::                   How to customize your mode line.
  467.  
  468. Debugging
  469.  
  470. * debug::                       How to use the built-in debugger.
  471. * debug-on-entry::              Start debugging when you call a function.
  472. * debug-on-quit::               Start debugging when you quit with C-g.
  473. * edebug::                      How to use Edebug, a source level debugger.
  474. * Debugging Exercises::
  475.  
  476. Handling the Kill Ring
  477.  
  478. * rotate-yank-pointer::         Move a pointer along a list and around.
  479. * yank::                        Paste a copy of a clipped element.
  480. * yank-pop::                    Insert first element pointed to.
  481.  
  482. The `rotate-yank-pointer' Function
  483.  
  484. * Understanding rotate-yk-ptr::
  485. * rotate-yk-ptr body::          The body of `rotate-yank-pointer'.
  486.  
  487. The Body of `rotate-yank-pointer'
  488.  
  489. * Digression concerning error::  How to mislead humans, but not computers.
  490. * rotate-yk-ptr else-part::     The else-part of the `if' expression.
  491. * Remainder Function::          The remainder, `%', function.
  492. * rotate-yk-ptr remainder::     Using `%' in `rotate-yank-pointer'.
  493. * kill-rng-yk-ptr last elt::    Pointing to the last element.
  494.  
  495. `yank'
  496.  
  497. * rotate-yk-ptr arg::           Pass the argument to `rotate-yank-pointer'.
  498. * rotate-yk-ptr negative arg::  Pass a negative argument.
  499.  
  500. A Graph with Labelled Axes
  501.  
  502. * Labelled Example::
  503. * print-graph Varlist::         `let' expression in `print-graph'.
  504. * print-Y-axis::                Print a label for the vertical axis.
  505. * print-X-axis::                Print a horizontal label.
  506. * Print Whole Graph::           The function to print a complete graph.
  507.  
  508. The `print-Y-axis' Function
  509.  
  510. * Height of label::             What height for the Y axis?
  511. * Compute a Remainder::         How to compute the remainder of a division.
  512. * Y Axis Element::              Construct a line for the Y axis.
  513. * Y-axis-column::               Generate a list of Y axis labels.
  514. * print-Y-axis Penultimate::    A not quite final version.
  515.  
  516. The `print-X-axis' Function
  517.  
  518. * Similarities differences::    Much like `print-Y-axis', but not exactly.
  519. * X Axis Tic Marks::            Create tic marks for the horizontal axis.
  520.  
  521. Printing the Whole Graph
  522.  
  523. * The final version::           A few changes.
  524. * Test print-graph::            Run a short test.
  525. * Graphing words in defuns::    Executing the final code.
  526. * lambda::                      How to write an anonymous function.
  527. * mapcar::                      Apply a function to elements of a list.
  528. * Another Bug::                 Yet another bug ... most insidious.
  529. * Final printed graph::         The graph itself!
  530.  
  531. 
  532. File: emacs-lisp-intro.info,  Node: Preface,  Next: List Processing,  Prev: Top,  Up: Top
  533.  
  534. Preface
  535. *******
  536.  
  537.    Most of the GNU Emacs integrated environment is written in the
  538. programming language called Emacs Lisp.  The code written in this
  539. programming language is the software--the sets of instructions--that
  540. tell the computer what to do when you give it commands.  Emacs is
  541. designed so that you can write new code in Emacs Lisp and easily
  542. install it as an extension to the editor.
  543.  
  544.    (GNU Emacs is sometimes called an "extensible editor", but it does
  545. much more than provide editing capabilities.  It is better to refer to
  546. Emacs as an "extensible computing environment".  However, that phrase
  547. is quite a mouthful.  It is easier to refer to Emacs simply as an
  548. editor.  Moreover, everything you do in Emacs--find the Mayan date and
  549. phases of the moon, simplify polynomials, debug code, manage files,
  550. read letters, write books--all these activities are kinds of editing in
  551. the most general sense of the word.)
  552.  
  553. * Menu:
  554.  
  555. * Why::                         Why learn Emacs Lisp?
  556. * On Reading this Text::        Read, gain familiarity, pick up habits....
  557. * Who You Are::                 For whom this is written.
  558. * Lisp History::
  559. * Note for Novices::            You can read this as a novice.
  560. * Thank You::
  561.  
  562. 
  563. File: emacs-lisp-intro.info,  Node: Why,  Next: On Reading this Text,  Prev: Preface,  Up: Preface
  564.  
  565. Why Study Emacs Lisp?
  566. =====================
  567.  
  568.    Although Emacs Lisp is usually thought of in association only with
  569. Emacs, it is a full computer programming language.  You can use Emacs
  570. Lisp as you would any other programming language.
  571.  
  572.    Perhaps you want to understand programming; perhaps you want to
  573. extend Emacs; or perhaps you want to become a programmer.  This
  574. introduction to Emacs Lisp is designed to get you started: to guide you
  575. in learning the fundamentals of programming, and more importantly, to
  576. show you how you can teach yourself to go further.
  577.  
  578. 
  579. File: emacs-lisp-intro.info,  Node: On Reading this Text,  Next: Who You Are,  Prev: Why,  Up: Preface
  580.  
  581. On Reading this Text
  582. ====================
  583.  
  584.    All through this document, you will see little sample programs you
  585. can run inside of Emacs.  If you read this document in Info inside of
  586. GNU Emacs, you can run the programs as they appear.  (This is easy to
  587. do and is explained when the examples are presented.)  Alternatively,
  588. you can read this introduction as a printed book while sitting beside a
  589. computer running Emacs.  (This is what I like to do; I like printed
  590. books.)  If you don't have a running Emacs beside you, you can still
  591. read this book, but in this case, it is best to treat it as a novel or
  592. as a travel guide to a country not yet visited: interesting, but not
  593. the same as being there.
  594.  
  595.    Much of this introduction is dedicated to walk-throughs or guided
  596. tours of code used in GNU Emacs.  These tours are designed for two
  597. purposes: first, to give you familiarity with real, working code (code
  598. you use every day); and, second, to give you familiarity with the way
  599. Emacs works.  It is interesting to see how a working environment is
  600. implemented.  Also, I hope that you will pick up the habit of browsing
  601. through source code.  You can learn from it and mine it for ideas.
  602. Having GNU Emacs is like having a dragon's cave of treasures.
  603.  
  604.    In addition to learning about Emacs as an editor and Emacs Lisp as a
  605. programming language, the examples and guided tours will give you an
  606. opportunity to get acquainted with Emacs as a Lisp programming
  607. environment.  GNU Emacs supports programming and provides tools that
  608. you will want to become comfortable using, such as `M-.' (the key which
  609. invokes the `find-tag' command).  You will also learn about buffers and
  610. other objects that are part of the environment.  Learning about these
  611. features of Emacs is like learning new routes around your home town.
  612.  
  613.    Finally, I hope to convey some of the skills for using Emacs to
  614. learn aspects of programming that you don't know.  You can often use
  615. Emacs to help you understand what puzzles you or to find out how to do
  616. something new.  This self-reliance is not only a pleasure, but an
  617. advantage.
  618.  
  619. 
  620. File: emacs-lisp-intro.info,  Node: Who You Are,  Next: Lisp History,  Prev: On Reading this Text,  Up: Preface
  621.  
  622. For Whom This is Written
  623. ========================
  624.  
  625.    This text is written as an elementary introduction for people who are
  626. not programmers.  If you are a programmer, you may not be satisfied with
  627. this primer.  The reason is that you may have become expert at reading
  628. reference manuals and be put off by the way this text is organized.
  629.  
  630.    An expert programmer who reviewed this text said to me:
  631.  
  632.      I prefer to learn from reference manuals.  I "dive into" each
  633.      paragraph, and "come up for air" between paragraphs.
  634.  
  635.      When I get to the end of a paragraph, I assume that that subject is
  636.      done, finished, that I know everything I need (with the possible
  637.      exception of the case when the next paragraph starts talking about
  638.      it in more detail).  I expect that a well written reference manual
  639.      will not have a lot of redundancy, and that it will have excellent
  640.      pointers to the (one) place where the information I want is.
  641.  
  642.    This introduction is not written for this person!
  643.  
  644.    Firstly, I try to say everything at least three times: first, to
  645. introduce it; second, to show it in context; and third, to show it in a
  646. different context, or to review it.
  647.  
  648.    Secondly, I hardly ever put all the information about a subject in
  649. one place, much less in one paragraph.  To my way of thinking, that
  650. imposes too heavy a burden on the reader.  Instead I try to explain
  651. only what you need to know at the time.  (Sometimes I include a little
  652. extra information so you won't be surprised later when the additional
  653. information is formally introduced.)
  654.  
  655.    When you read this text, you are not expected to learn everything the
  656. first time.  Frequently, you need only make, as it were, a `nodding
  657. acquaintance' with some of the items mentioned.  My hope is that I have
  658. structured the text and given you enough hints that you will be alert to
  659. what is important, and concentrate on it.
  660.  
  661.    You will need to "dive into" some paragraphs; there is no other way
  662. to read them.  But I have tried to keep down the number of such
  663. paragraphs.  This book is intended as an approachable hill, rather than
  664. as a daunting mountain.
  665.  
  666.    This introduction to `Programming in Emacs Lisp' has a companion
  667. document, *Note The GNU Emacs Lisp Reference Manual: (elisp)Top.  The
  668. reference manual has more detail than this introduction.  In the
  669. reference manual, all the information about one topic is concentrated
  670. in one place.  You should turn to it if you are like the programmer
  671. quoted above.  And, of course, after you have read this `Introduction',
  672. you will find the `Reference Manual' useful when you are writing your
  673. own programs.
  674.  
  675. 
  676. File: emacs-lisp-intro.info,  Node: Lisp History,  Next: Note for Novices,  Prev: Who You Are,  Up: Preface
  677.  
  678. Lisp History
  679. ============
  680.  
  681.    Lisp was first developed in the late 1950s at the Massachusetts
  682. Institute of Technology for research in artificial intelligence.  The
  683. great power of the Lisp language makes it superior for other purposes as
  684. well, such as writing editor commands and integrated environments.
  685.  
  686.    GNU Emacs Lisp is largely inspired by Maclisp, which was written at
  687. MIT in the 1960s.  It is somewhat inspired by Common Lisp, which became
  688. a standard in the 1980s.  However, Emacs Lisp is much simpler than
  689. Common Lisp.  (The standard Emacs distribution contains an optional
  690. extensions file, `cl.el', that adds many Common Lisp features to Emacs
  691. Lisp.)
  692.  
  693. 
  694. File: emacs-lisp-intro.info,  Node: Note for Novices,  Next: Thank You,  Prev: Lisp History,  Up: Preface
  695.  
  696. A Note for Novices
  697. ==================
  698.  
  699.    If you don't know GNU Emacs, you can still read this document
  700. profitably.  However, I recommend you learn Emacs, if only to learn to
  701. move around your computer screen.  You can teach yourself how to use
  702. Emacs with the on-line tutorial.  To use it, type `C-h t'.  (This means
  703. you press and release the <CTRL> key and the `h' at the same time, and
  704. then press and release `t'.)
  705.  
  706.    Also, I often refer to one of Emacs' standard commands by listing the
  707. keys which you press to invoke the command and then giving the name of
  708. the command in parentheses, like this: `M-C-\' (`indent-region').  What
  709. this means is that the `indent-region' command is customarily invoked
  710. by typing `M-C-\'.  (You can, if you wish, change the keys that are
  711. typed to invoke the command; this is called "rebinding".  *Note
  712. Keymaps: Keymaps.)  The abbreviation `M-C-\' means that you type your
  713. <META> key, <CTRL> key and <\> key all at the same time.  (On many
  714. modern keyboards the <META> key is labelled <ALT>.)  Sometimes a
  715. combination like this is called a keychord, since it is similar to the
  716. way you play a chord on a piano.  If your keyboard does not have a
  717. <META> key, the <ESC> key prefix is used in place of it.  In this case,
  718. `M-C-\' means that you press and release your <ESC> key and then type
  719. the <CTRL> key and the <\> key at the same time.  But usually `M-C-\'
  720. means press the <CTRL> key along with the key that is labelled <ALT>
  721. and, at the same time, press the <\> key.
  722.  
  723.    In addition to typing a lone keychord, you can prefix what you type
  724. with `C-u', which is called the `universal argument'.  The `C-u'
  725. keychord passes an argument to the subsequent command.  Thus, to indent
  726. a region of plain text by 6 spaces, mark the region, and then type
  727. `C-u 6 M-C-\'.  (If you do not specify a number, Emacs either passes
  728. the number 4 to the command or otherwise runs the command differently
  729. than it would otherwise.)  *Note Numeric Arguments: (emacs)Arguments.
  730.  
  731.    If you are reading this in Info using GNU Emacs, you can read through
  732. this whole document just by pressing the space bar, <SPC>.  (To learn
  733. about Info, type `C-h i' and then select Info.)
  734.  
  735.    A note on terminology:  when I use the word Lisp alone, I often am
  736. referring to the various dialects of Lisp in general, but when I speak
  737. of Emacs Lisp, I am referring to GNU Emacs Lisp in particular.
  738.  
  739. 
  740. File: emacs-lisp-intro.info,  Node: Thank You,  Prev: Note for Novices,  Up: Preface
  741.  
  742. Thank You
  743. =========
  744.  
  745.    My thanks to all who helped me with this book.  My especial thanks to
  746. Jim Blandy, Noah Friedman, Jim Kingdon, Roland McGrath, Frank Ritter,
  747. Randy Smith, Richard M. Stallman, and Melissa Weisshaus.  My thanks
  748. also go to both Philip Johnson and David Stampe for their patient
  749. encouragement.  My mistakes are my own.
  750.  
  751.                                                      Robert J. Chassell
  752.  
  753. 
  754. File: emacs-lisp-intro.info,  Node: List Processing,  Next: Practicing Evaluation,  Prev: Preface,  Up: Top
  755.  
  756. List Processing
  757. ***************
  758.  
  759.    To the untutored eye, Lisp is a strange programming language.  In
  760. Lisp code there are parentheses everywhere.  Some people even claim
  761. that the name stands for `Lots of Isolated Silly Parentheses'.  But the
  762. claim is unwarranted.  Lisp stands for LISt Processing, and the
  763. programming language handles _lists_ (and lists of lists) by putting
  764. them between parentheses.  The parentheses mark the boundaries of the
  765. list.  Sometimes a list is preceded by a single apostrophe or quotation
  766. mark, `''.  Lists are the basis of Lisp.
  767.  
  768. * Menu:
  769.  
  770. * Lisp Lists::                  What are lists?
  771. * Run a Program::               Any list in Lisp is a program ready to run.
  772. * Making Errors::               Generating an error message.
  773. * Names & Definitions::         Names of symbols and function definitions.
  774. * Lisp Interpreter::            What the Lisp interpreter does.
  775. * Evaluation::                  Running a program.
  776. * Variables::                   Returning a value from a variable.
  777. * Arguments::                   Passing information to a function.
  778. * set & setq::                  Setting the value of a variable.
  779. * Summary::                     The major points.
  780. * Error Message Exercises::
  781.  
  782. 
  783. File: emacs-lisp-intro.info,  Node: Lisp Lists,  Next: Run a Program,  Prev: List Processing,  Up: List Processing
  784.  
  785. Lisp Lists
  786. ==========
  787.  
  788.    In Lisp, a list looks like this: `'(rose violet daisy buttercup)'.
  789. This list is preceded by a single apostrophe.  It could just as well be
  790. written as follows, which looks more like the kind of list you are
  791. likely to be familiar with:
  792.  
  793.      '(rose
  794.        violet
  795.        daisy
  796.        buttercup)
  797.  
  798. The elements of this list are the names of the four different flowers,
  799. separated from each other by whitespace and surrounded by parentheses,
  800. like flowers in a field with a stone wall around them.
  801.  
  802. * Menu:
  803.  
  804. * Numbers Lists::               List have numbers, other lists, in them.
  805. * Lisp Atoms::                  Elemental entities.
  806. * Whitespace in Lists::         Formating lists to be readable.
  807. * Typing Lists::                How GNU Emacs helps you type lists.
  808.  
  809. 
  810. File: emacs-lisp-intro.info,  Node: Numbers Lists,  Next: Lisp Atoms,  Prev: Lisp Lists,  Up: Lisp Lists
  811.  
  812. Numbers, Lists inside of Lists
  813. ------------------------------
  814.  
  815.    Lists can also have numbers in them, as in this list: `(+ 2 2)'.
  816. This list has a plus-sign, `+', followed by two `2's, each separated by
  817. whitespace.
  818.  
  819.    In Lisp, both data and programs are represented the same way; that
  820. is, they are both lists of words, numbers, or other lists, separated by
  821. whitespace and surrounded by parentheses.  (Since a program looks like
  822. data, one program may easily serve as data for another; this is a very
  823. powerful feature of Lisp.)  (Incidentally, these two parenthetical
  824. remarks are _not_ Lisp lists, because they contain `;' and `.' as
  825. punctuation marks.)
  826.  
  827.    Here is another list, this time with a list inside of it:
  828.  
  829.      '(this list has (a list inside of it))
  830.  
  831.    The components of this list are the words `this', `list', `has', and
  832. the list `(a list inside of it)'.  The interior list is made up of the
  833. words `a', `list', `inside', `of', `it'.
  834.  
  835. 
  836. File: emacs-lisp-intro.info,  Node: Lisp Atoms,  Next: Whitespace in Lists,  Prev: Numbers Lists,  Up: Lisp Lists
  837.  
  838. Lisp Atoms
  839. ----------
  840.  
  841.    In Lisp, what we have been calling words are called "atoms".  This
  842. term comes from the historical meaning of the word atom, which means
  843. `indivisible'.  As far as Lisp is concerned, the words we have been
  844. using in the lists cannot be divided into any smaller parts and still
  845. mean the same thing as part of a program; likewise with numbers and
  846. single character symbols like `+'.  On the other hand, unlike an atom,
  847. a list can be split into parts.  (*Note `car' `cdr' & `cons'
  848. Fundamental Functions: car cdr & cons.)
  849.  
  850.    In a list, atoms are separated from each other by whitespace.  They
  851. can be right next to a parenthesis.
  852.  
  853.    Technically speaking, a list in Lisp consists of parentheses
  854. surrounding atoms separated by whitespace or surrounding other lists or
  855. surrounding both atoms and other lists.  A list can have just one atom
  856. in it or have nothing in it at all.  A list with nothing in it looks
  857. like this: `()', and is called the "empty list".  Unlike anything else,
  858. an empty list is considered both an atom and a list at the same time.
  859.  
  860.    The printed representation of both atoms and lists are called
  861. "symbolic expressions" or, more concisely, "s-expressions".  The word
  862. "expression" by itself can refer to either the printed representation,
  863. or to the atom or list as it is held internally in the computer.
  864. Often, people use the term "expression" indiscriminately.  (Also, in
  865. many texts, the word "form" is used as a synonym for expression.)
  866.  
  867.    Incidentally, the atoms that make up our universe were named such
  868. when they were thought to be indivisible; but it has been found that
  869. physical atoms are not indivisible.  Parts can split off an atom or it
  870. can fission into two parts of roughly equal size.  Physical atoms were
  871. named prematurely, before their truer nature was found.  In Lisp,
  872. certain kinds of atom, such as an array, can be separated into parts;
  873. but the mechanism for doing this is different from the mechanism for
  874. splitting a list.  As far as list operations are concerned, the atoms
  875. of a list are unsplittable.
  876.  
  877.    As in English, the meanings of the component letters of a Lisp atom
  878. are different from the meaning the letters make as a word.  For
  879. example, the word for the South American sloth, the `ai', is completely
  880. different from the two words, `a', and `i'.
  881.  
  882.    There are many kinds of atom in nature but only a few in Lisp: for
  883. example, "numbers", such as 37, 511, or 1729, and "symbols", such as
  884. `+', `foo', or `forward-line'.  The words we have listed in the
  885. examples above are all symbols.  In everyday Lisp conversation, the
  886. word "atom" is not often used, because programmers usually try to be
  887. more specific about what kind of atom they are dealing with.  Lisp
  888. programming is mostly about symbols (and sometimes numbers) within
  889. lists.  (Incidentally, the preceding three word parenthetical remark is
  890. a proper list in Lisp, since it consists of atoms, which in this case
  891. are symbols, separated by whitespace and enclosed by parentheses,
  892. without any non-Lisp punctuation.)
  893.  
  894.    In addition, text between double quotation marks--even sentences or
  895. paragraphs--is an atom.  Here is an example:
  896.  
  897.      '(this list includes "text between quotation marks.")
  898.  
  899. In Lisp, all of the quoted text including the punctuation mark and the
  900. blank spaces is a single atom.  This kind of atom is called a "string"
  901. (for `string of characters') and is the sort of thing that is used for
  902. messages that a computer can print for a human to read.  Strings are a
  903. different kind of atom than numbers or symbols and are used differently.
  904.  
  905. 
  906. File: emacs-lisp-intro.info,  Node: Whitespace in Lists,  Next: Typing Lists,  Prev: Lisp Atoms,  Up: Lisp Lists
  907.  
  908. Whitespace in Lists
  909. -------------------
  910.  
  911.    The amount of whitespace in a list does not matter.  From the point
  912. of view of the Lisp language,
  913.  
  914.      '(this list
  915.         looks like this)
  916.  
  917. is exactly the same as this:
  918.  
  919.      '(this list looks like this)
  920.  
  921.    Both examples show what to Lisp is the same list, the list made up of
  922. the symbols `this', `list', `looks', `like', and `this' in that order.
  923.  
  924.    Extra whitespace and newlines are designed to make a list more
  925. readable by humans.  When Lisp reads the expression, it gets rid of all
  926. the extra whitespace (but it needs to have at least one space between
  927. atoms in order to tell them apart.)
  928.  
  929.    Odd as it seems, the examples we have seen cover almost all of what
  930. Lisp lists look like!  Every other list in Lisp looks more or less like
  931. one of these examples, except that the list may be longer and more
  932. complex.  In brief, a list is between parentheses, a string is between
  933. quotation marks, a symbol looks like a word, and a number looks like a
  934. number.  (For certain situations, square brackets, dots and a few other
  935. special characters may be used; however, we will go quite far without
  936. them.)
  937.  
  938. 
  939. File: emacs-lisp-intro.info,  Node: Typing Lists,  Prev: Whitespace in Lists,  Up: Lisp Lists
  940.  
  941. GNU Emacs Helps You Type Lists
  942. ------------------------------
  943.  
  944.    When you type a Lisp expression in GNU Emacs using either Lisp
  945. Interaction mode or Emacs Lisp mode, you have available to you several
  946. commands to format the Lisp expression so it is easy to read.  For
  947. example, pressing the <TAB> key automatically indents the line the
  948. cursor is on by the right amount.  A command to properly indent the
  949. code in a region is customarily bound to `M-C-\'.  Indentation is
  950. designed so that you can see which elements of a list belongs to which
  951. list--elements of a sub-list are indented more than the elements of the
  952. enclosing list.
  953.  
  954.    In addition, when you type a closing parenthesis, Emacs momentarily
  955. jumps the cursor back to the matching opening parenthesis, so you can
  956. see which one it is.  This is very useful, since every list you type in
  957. Lisp must have its closing parenthesis match its opening parenthesis.
  958. (*Note Major Modes: (emacs)Major Modes, for more information about
  959. Emacs' modes.)
  960.  
  961. 
  962. File: emacs-lisp-intro.info,  Node: Run a Program,  Next: Making Errors,  Prev: Lisp Lists,  Up: List Processing
  963.  
  964. Run a Program
  965. =============
  966.  
  967.    A list in Lisp--any list--is a program ready to run.  If you run it
  968. (for which the Lisp jargon is "evaluate"), the computer will do one of
  969. three things: do nothing except return to you the list itself; send you
  970. an error message; or, treat the first symbol in the list as a command
  971. to do something.  (Usually, of course, it is the last of these three
  972. things that you really want!)
  973.  
  974.    The single apostrophe, `'', that I put in front of some of the
  975. example lists in preceding sections is called a "quote"; when it
  976. precedes a list, it tells Lisp to do nothing with the list, other than
  977. take it as it is written.  But if there is no quote preceding a list,
  978. the first item of the list is special: it is a command for the computer
  979. to obey.  (In Lisp, these commands are called _functions_.)  The list
  980. `(+ 2 2)' shown above did not have a quote in front of it, so Lisp
  981. understands that the `+' is an instruction to do something with the
  982. rest of the list: add the numbers that follow.
  983.  
  984.    If you are reading this inside of GNU Emacs in Info, here is how you
  985. can evaluate such a list:  place your cursor immediately after the right
  986. hand parenthesis of the following list and then type `C-x C-e':
  987.  
  988.      (+ 2 2)
  989.  
  990. You will see the number `4' appear in the echo area.  (In the jargon,
  991. what you have just done is "evaluate the list."  The echo area is the
  992. line at the bottom of the screen that displays or "echoes" text.)  Now
  993. try the same thing with a quoted list:  place the cursor right after
  994. the following list and type `C-x C-e':
  995.  
  996.      '(this is a quoted list)
  997.  
  998. You will see `(this is a quoted list)' appear in the echo area.
  999.  
  1000.    In both cases, what you are doing is giving a command to the program
  1001. inside of GNU Emacs called the "Lisp interpreter"--giving the
  1002. interpreter a command to evaluate the expression.  The name of the Lisp
  1003. interpreter comes from the word for the task done by a human who comes
  1004. up with the meaning of an expression--who "interprets" it.
  1005.  
  1006.    You can also evaluate an atom that is not part of a list--one that is
  1007. not surrounded by parentheses; again, the Lisp interpreter translates
  1008. from the humanly readable expression to the language of the computer.
  1009. But before discussing this (*note Variables::), we will discuss what the
  1010. Lisp interpreter does when you make an error.
  1011.  
  1012. 
  1013. File: emacs-lisp-intro.info,  Node: Making Errors,  Next: Names & Definitions,  Prev: Run a Program,  Up: List Processing
  1014.  
  1015. Generate an Error Message
  1016. =========================
  1017.  
  1018.    Partly so you won't worry if you do it accidentally, we will now give
  1019. a command to the Lisp interpreter that generates an error message.
  1020. This is a harmless activity; and indeed, we will often try to generate
  1021. error messages intentionally.  Once you understand the jargon, error
  1022. messages can be informative.  Instead of being called "error" messages,
  1023. they should be called "help" messages.  They are like signposts to a
  1024. traveller in a strange country; deciphering them can be hard, but once
  1025. understood, they can point the way.
  1026.  
  1027.    The error message is generated by a built-in GNU Emacs debugger.  We
  1028. will `enter the debugger'.  You get out of the debugger by typing `q'.
  1029.  
  1030.    What we will do is evaluate a list that is not quoted and does not
  1031. have a meaningful command as its first element.  Here is a list almost
  1032. exactly the same as the one we just used, but without the single-quote
  1033. in front of it.  Position the cursor right after it and type `C-x C-e':
  1034.  
  1035.      (this is an unquoted list)
  1036.  
  1037. What you see depends on which version of Emacs you are running.  GNU
  1038. Emacs version 21 provides more information than version 20 and before.
  1039. First, the more recent result of generating an error; then the earlier,
  1040. version 20 result.
  1041.  
  1042. In GNU Emacs version 21, a `*Backtrace*' window will open up and you
  1043. will see the following in it:
  1044.  
  1045.      ---------- Buffer: *Backtrace* ----------
  1046.      Debugger entered--Lisp error: (void-function this)
  1047.        (this is an unquoted list)
  1048.        eval((this is an unquoted list))
  1049.        eval-last-sexp-1(nil)
  1050.        eval-last-sexp(nil)
  1051.        call-interactively(eval-last-sexp)
  1052.      ---------- Buffer: *Backtrace* ----------
  1053.  
  1054. Your cursor will be in this window (you may have to wait a few seconds
  1055. before it becomes visible).  To quit the debugger and make the debugger
  1056. window go away, type:
  1057.  
  1058.      q
  1059.  
  1060. Please type `q' right now, so you become confident that you can get out
  1061. of the debugger.  Then, type `C-x C-e' again to re-enter it.
  1062.  
  1063.    Based on what we already know, we can almost read this error message.
  1064.  
  1065.    You read the `*Backtrace*' buffer from the bottom up; it tells you
  1066. what Emacs did.  When you typed `C-x C-e', you made an interactive call
  1067. to the command `eval-last-sexp'.  `eval' is an abbreviation for
  1068. `evaluate' and `sexp' is an abbreviation for `symbolic expression'.
  1069. The command means `evaluate last symbolic expression', which is the
  1070. expression just before your cursor.
  1071.  
  1072.    Each line above tells you what the Lisp interpreter evaluated next.
  1073. The most recent action is at the top.  The buffer is called the
  1074. `*Backtrace*' buffer because it enables you to track Emacs backwards.
  1075.  
  1076.    At the top of the `*Backtrace*' buffer, you see the line:
  1077.  
  1078.      Debugger entered--Lisp error: (void-function this)
  1079.  
  1080. The Lisp interpreter tried to evaluate the first atom of the list, the
  1081. word `this'.  It is this action that generated the error message
  1082. `void-function this'.
  1083.  
  1084.    The message contains the words `void-function' and `this'.
  1085.  
  1086.    The word `function' was mentioned once before.  It is a very
  1087. important word.  For our purposes, we can define it by saying that a
  1088. "function" is a set of instructions to the computer that tell the
  1089. computer to do something.
  1090.  
  1091.    Now we can begin to understand the error message: `void-function
  1092. this'.  The function (that is, the word `this') does not have a
  1093. definition of any set of instructions for the computer to carry out.
  1094.  
  1095.    The slightly odd word, `void-function', is designed to cover the way
  1096. Emacs Lisp is implemented, which is that when a symbol does not have a
  1097. function definition attached to it, the place that should contain the
  1098. instructions is `void'.
  1099.  
  1100.    On the other hand, since we were able to add 2 plus 2 successfully,
  1101. by evaluating `(+ 2 2)', we can infer that the symbol `+' must have a
  1102. set of instructions for the computer to obey and those instructions
  1103. must be to add the numbers that follow the `+'.
  1104.  
  1105.    In GNU Emacs version 20, and in earlier versions, you will see only
  1106. one line of error message; it will appear in the echo area and look
  1107. like this:
  1108.  
  1109.      Symbol's function definition is void: this
  1110.  
  1111. (Also, your terminal may beep at you--some do, some don't; and others
  1112. blink.  This is just a device to get your attention.)  The message goes
  1113. away as soon as you type another key, even just to move the cursor.
  1114.  
  1115.    We know the meaning of the word `Symbol'.  It refers to the first
  1116. atom of the list, the word `this'.  The word `function' refers to the
  1117. instructions that tell the computer what to do.  (Technically, the
  1118. symbol tells the computer where to find the instructions, but this is a
  1119. complication we can ignore for the moment.)
  1120.  
  1121.    The error message can be understood: `Symbol's function definition
  1122. is void: this'.  The symbol (that is, the word `this') lacks
  1123. instructions for the computer to carry out.
  1124.  
  1125. 
  1126. File: emacs-lisp-intro.info,  Node: Names & Definitions,  Next: Lisp Interpreter,  Prev: Making Errors,  Up: List Processing
  1127.  
  1128. Symbol Names and Function Definitions
  1129. =====================================
  1130.  
  1131.    We can articulate another characteristic of Lisp based on what we
  1132. have discussed so far--an important characteristic: a symbol, like `+',
  1133. is not itself the set of instructions for the computer to carry out.
  1134. Instead, the symbol is used, perhaps temporarily, as a way of locating
  1135. the definition or set of instructions.  What we see is the name through
  1136. which the instructions can be found.  Names of people work the same
  1137. way.  I can be referred to as `Bob'; however, I am not the letters `B',
  1138. `o', `b' but am the consciousness consistently associated with a
  1139. particular life-form.  The name is not me, but it can be used to refer
  1140. to me.
  1141.  
  1142.    In Lisp, one set of instructions can be attached to several names.
  1143. For example, the computer instructions for adding numbers can be linked
  1144. to the symbol `plus' as well as to the symbol `+' (and are in some
  1145. dialects of Lisp).  Among humans, I can be referred to as `Robert' as
  1146. well as `Bob' and by other words as well.
  1147.  
  1148.    On the other hand, a symbol can have only one function definition
  1149. attached to it at a time.  Otherwise, the computer would be confused as
  1150. to which definition to use.  If this were the case among people, only
  1151. one person in the world could be named `Bob'.  However, the function
  1152. definition to which the name refers can be changed readily.  (*Note
  1153. Install a Function Definition: Install.)
  1154.  
  1155.    Since Emacs Lisp is large, it is customary to name symbols in a way
  1156. that identifies the part of Emacs to which the function belongs.  Thus,
  1157. all the names for functions that deal with Texinfo start with
  1158. `texinfo-' and those for functions that deal with reading mail start
  1159. with `rmail-'.
  1160.  
  1161. 
  1162. File: emacs-lisp-intro.info,  Node: Lisp Interpreter,  Next: Evaluation,  Prev: Names & Definitions,  Up: List Processing
  1163.  
  1164. The Lisp Interpreter
  1165. ====================
  1166.  
  1167.    Based on what we have seen, we can now start to figure out what the
  1168. Lisp interpreter does when we command it to evaluate a list.  First, it
  1169. looks to see whether there is a quote before the list; if there is, the
  1170. interpreter just gives us the list.  On the other hand, if there is no
  1171. quote, the interpreter looks at the first element in the list and sees
  1172. whether it has a function definition.  If it does, the interpreter
  1173. carries out the instructions in the function definition.  Otherwise,
  1174. the interpreter prints an error message.
  1175.  
  1176.    This is how Lisp works.  Simple.  There are added complications
  1177. which we will get to in a minute, but these are the fundamentals.  Of
  1178. course, to write Lisp programs, you need to know how to write function
  1179. definitions and attach them to names, and how to do this without
  1180. confusing either yourself or the computer.
  1181.  
  1182. * Menu:
  1183.  
  1184. * Complications::               Variables, Special forms, Lists within.
  1185. * Byte Compiling::              Specially processing code for speed.
  1186.  
  1187.